██████╗ ███████╗████████╗██╗██████╗ ███████╗██████╗ ██╗ █████╗
██╔══██╗██╔════╝╚══██╔══╝██║██╔══██╗██╔════╝██╔══██╗██║██╔══██╗
██████╔╝█████╗ ██║ ██║██████╔╝█████╗ ██║ ██║██║███████║
██╔══██╗██╔══╝ ██║ ██║██╔═══╝ ██╔══╝ ██║ ██║██║██╔══██║
██║ ██║███████╗ ██║ ██║██║ ███████╗██████╔╝██║██║ ██║
╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚═════╝ ╚═╝╚═╝ ╚═╝
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Blowfish
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
In mwbgcrittologia, mwbwblowfish è un mwcaalgoritmo a mwcqchiave mwcgsimmetrica a mwcwblocchi, ideato nel mwda1993 da mwdqBruce Schneier e implementato in molti mwdgsoftware di mwdwcrittografia. Sebbene non sia reperibile una mweacrittanalisi di Blowfish, questo algoritmo sta suscitando nuovamente interesse se implementato con una maggior mweqdimensione dei blocchi, come nel caso di mwegAES o mwewTwofish.
Schneier progettò blowfish per essere un algoritmo di utilizzo generale, utile a rimpiazzare l'allora decadente mwfqData Encryption Standard (DES) e libero da problemi caratteristici di altri algoritmi. All'epoca molti altri sistemi di cifratura erano proprietari, coperti da brevetto o da segreti governativi. Schneier dichiarò: mwfg«Blowfish è libero da brevetti, e rimarrà tale in tutte le nazioni. L'algoritmo è di pubblico dominio, e può essere usato liberamente da chiunque».
Due delle caratteristiche di rilievo di blowfish sono mwgaS-Box dipendenti dalla chiave, e una lista di chiavi estremamente complessa.
Contents
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
L'algoritmo
Blowfish ha una mwhadimensione blocco a 64bit e una lunghezza di chiave variabile fra i 32 e i 448 bit. Ha una struttura a mwhqrete di Feistel a 16 cicli, e usa S-Box grandi e dipendenti dalla chiave. Ha una struttura simile al sistema mwhgCAST-128, che usa però S-Box fisse.
Il diagramma a sinistra mostra come opera blowfish. Ogni linea rappresenta 32 bit. L'algoritmo gestisce due tipi di liste di sottochiavi: una lista di 18 elementi, definita mwjaP-array, e quattro liste da 256 elementi ciascuna di S-Box (S0, S1, S2 e S3), per un totale di 5 array di sottochiavi. Ciascuna S-Box ha in ingresso 8 bit di informazioni, e produce in uscita 32 bit. A ogni ripetizione del ciclo si usa un elemento diverso del mwjqP-array, e dopo l'ultimo ciclo a ogni metà del blocco di dati viene moltiplicata in mwjgXOR con uno dei due elementi inutilizzati del mwjwP-array.
Dato che blowfish è una rete di Feistel, può essere invertito semplicemente mettendo in XOR gli elementi 17 e 18 del mwlqP-array, e quindi utilizzando gli elementi del mwlgP-array in ordine inverso.
La lista delle chiavi di blowfish viene generata caricando i valori iniziali del mwmaP-array e delle S-Box con rappresentazioni esadecimali delle cifre di mwmqpi greco, che apparentemente non hanno periodicità o schemi ripetitivi. La chiave segreta viene quindi messa in XOR con ciascun elemento del mwmgP-array (ripetendo la chiave, quando necessario). Un blocco da 64bit di valore zero viene criptato con l'algoritmo stesso, e il risultato cifrato sostituisce gli elementi P-1 e P-2. Il risultato cifrato viene quindi codificato nuovamente con le nuove sottochiavi, e va a sostituire gli elementi P-3 e P-4. Questo procedimento continua fino a rimpiazzare tutti gli elementi del mwmwP-array e delle S-Box. In tutto, l'algoritmo di cifratura di blowfish viene eseguito 521 volte in modo da generare tutte le sottochiavi, ed elaborando circa 4Kb di dati.
Crittanalisi di blowfish
Non esistono, o perlomeno non sono conosciute, mwngcrittanalisi di blowfish, almeno fino al mwnw2004, dato che una dimensione di blocco di 64bit è oggi considerata troppo piccola, e codificando più di 2mwoa32 blocchi si potrebbero rivelare alcuni frammenti del testo originale, a causa del mwoqparadosso del compleanno. Nonostante questo, blowfish fino ad oggi sembra abbastanza sicuro. Mentre la ridotta dimensione del blocco non crea problemi per applicazioni tradizionali come l'e-mail, potrebbe rendere inutilizzabile blowfish per la cifratura di testi di grandi dimensioni, come ad esempio in caso di archivi.
Nel mwow1996 Serge Vaudenay escogitò un attacco che permetteva di forzare la cifratura di un testo conoscendo 2mwpq8mwpgr+1 testi in chiaro con la stessa chiave, dove mwpwr identifica il numero di cicli (mwqarounds). Inoltre trovò una classe di mwqqchiavi deboli che possono essere identificate e rotte, con lo stesso attacco, conoscendo solo 2mwqg4mwqwr + 1 testi in chiaro. Questo attacco non può essere usato contro il blowfish implementato con tutti i 16 cicli. Vaudenay utilizzò una variante basata su meno cicli di cifratura. Vincent Rijmen, nella sua tesi di dottorato, introdusse un attacco differenziale di secondo grado in grado di forzare non più di quattro cicli. Non rimane quindi nessuna via conosciuta per forzare un testo codificato con sedici cicli, tranne la mwraforza bruta.
Nel mwrg2005 Dieter Schmidt studiò la lista delle chiavi di blowfish e notò che le sottochiavi del terzo e quarto ciclo sono indipendenti dai primi 64 bit della chiave utente mwrw.
Blowfish in pratica
Blowfish è uno degli algoritmi di codifica a blocchi più veloci in circolazione, eccetto quando si cambi la chiave. Ogni nuova chiave richiede un tempo di elaborazione equivalente alla codifica di 4mwsg kB di testo, che è molto se confrontato con altri sistemi di mwswcifratura a blocchi. Questo impedisce che venga usato in alcune applicazioni, ma non è un problema in altre. In un caso, è addirittura un vantaggio: il metodo di mwtahashing basato su password utilizzato in mwtqOpenBSD usa un algoritmo derivato dal blowfish che sfrutta la lentezza di elaborazione delle chiavi; l'idea è che il maggior tempo di calcolo necessario migliori la protezione nei confronti di un mwtgattacco basato su dizionario.
In alcune implementazioni blowfish usa un'area di memoria molto superiore ai 4mwua kB teorici di mwuqRAM. Questo non è un problema nemmeno per i mwugpersonal computer più vecchi, ma ne impedisce l'uso in piccoli sistemi integrati come le prime mwuwsmart card.
Blowfish non è soggetto a nessun brevetto ed è quindi liberamente utilizzabile da chiunque. Questo ha contribuito alla sua popolarità nei software di crittografia.
Voci correlate
Altri progetti
Altri progetti
• Wikimedia Commons
• Wikimedia Commons contiene immagini o altri file sul Blowfish
Collegamenti esterni